home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / etc / hotplug / input.rc < prev    next >
Text File  |  2006-05-01  |  3KB  |  149 lines

  1. #!/bin/sh
  2. #
  3. # input.rc    This loads handlers for those input devices
  4. #        that have drivers compiled in kernel
  5. #        Currently stopping is not supported
  6. #
  7. # Best invoked via /etc/init.d/hotplug or equivalent, with
  8. # writable /tmp, /usr mounted, and syslogging active.
  9. #
  10.  
  11.  
  12. PATH=/sbin:/bin:/usr/sbin:/usr/bin
  13. PROCDIR=/proc/bus/input
  14.  
  15. # source function library
  16. if [ -f /etc/init.d/functions ]; then
  17.     . /etc/init.d/functions
  18. elif [ -f /etc/rc.d/init.d/functions ]; then
  19.     . /etc/rc.d/init.d/functions
  20. fi
  21.  
  22. if [ -f /etc/hotplug/hotplug.functions ]; then
  23.     . /etc/hotplug/hotplug.functions
  24. fi
  25.  
  26. input_reset_state () {
  27.  
  28.     PRODUCT=
  29.     NAME=
  30.     PHYS=
  31.     EV=
  32.     KEY=
  33.     REL=
  34.     ABS=
  35.     MSC=
  36.     LED=
  37.     SND=
  38.     FF=
  39.  
  40. }
  41.  
  42. #
  43. # "COLD PLUG" ... load input handlers for compile-in input drivers loaded
  44. # before the OS could really handle hotplug, perhaps because /sbin or
  45. # $HOTPLUG_DIR wasn't available or /tmp wasn't writable.  When/if the
  46. # /sbin/hotplug program is invoked then, hotplug event notifications
  47. # get dropped.  To make up for such "cold boot" errors, we synthesize
  48. # all the hotplug events we expect to have seen already.  They can be
  49. # out of order, and some might be duplicates.
  50. #
  51. input_boot_events ()
  52. {
  53.     # do not even try if /proc/bus/input is missing
  54.     [ -d $PROCDIR ] || return
  55.  
  56.     if [ ! -r $PROCDIR/devices ]; then
  57.         echo $"** can't synthesize input events - $PROCDIR/devices missing"
  58.         return
  59.     fi
  60.  
  61.     ACTION=add
  62.     export ACTION
  63.  
  64.     export PRODUCT NAME PHYS EV KEY REL ABS MSC LED SND FF
  65.     input_reset_state
  66.  
  67.     #
  68.     # the following reads from /proc/bus/input/devices. It is inherently
  69.     # racy (esp. as this file may be changed by input.agent invocation)
  70.     # but so far input devices do not appear in sysfs
  71.     #
  72.     while read line; do
  73.     case "$line" in
  74.         I:* )    # product ID
  75.         eval "${line#I: }"
  76.         PRODUCT="$Bus/$Vendor/$Product/$Version"
  77.         ;;
  78.         N:* )    # name
  79.         eval "${line#N: }"
  80.         NAME="$Name"
  81.         ;;
  82.         P:* )    # Physical
  83.         eval "${line#P: }"
  84.         PHYS="$Phys"
  85.         ;;
  86.         B:* )    # Controls supported
  87.         line="${line#B: }"
  88.         eval "${line%%=*}=\"${line#*=}\""
  89.         ;;
  90.         "" )    # End of block
  91.         debug_mesg "Invoking input.agent"
  92.         debug_mesg "PRODUCT=$PRODUCT"
  93.         debug_mesg "NAME=$NAME"
  94.         debug_mesg "PHYS=$PHYS"
  95.         debug_mesg "EV=$EV"
  96.         debug_mesg "KEY=$KEY"
  97.         debug_mesg "REL=$REL"
  98.         debug_mesg "ABS=$ABS"
  99.         debug_mesg "MSC=$MSC"
  100.         debug_mesg "LED=$LED"
  101.         debug_mesg "SND=$SND"
  102.         debug_mesg "FF=$FF"
  103.         /etc/hotplug/input.agent < /dev/null
  104.         input_reset_state
  105.         ;;
  106.     esac
  107.     done < $PROCDIR/devices
  108. }
  109.  
  110.  
  111. # See how we were called.
  112. case "$1" in
  113.   start)
  114.     input_boot_events
  115.         ;;
  116.   stop)
  117.     : not supported currently
  118.         ;;
  119.   status)
  120.     echo $"INPUT status for kernel: " `uname -srm`
  121.     echo ''
  122.  
  123.     echo "INPUT devices:"
  124.     if [ -r $PROCDIR/devices ]; then
  125.         grep "^[INHP]:" $PROCDIR/devices
  126.     else
  127.         echo "$PROCDIR/devices not available"
  128.     fi
  129.     echo ''
  130.  
  131.     echo "INPUT handlers:"
  132.     if [ -r $PROCDIR/handlers ]; then
  133.         cat $PROCDIR/handlers
  134.     else
  135.         echo "$PROCDIR/handlers not available"
  136.     fi
  137.  
  138.     echo ''
  139.  
  140.     ;;
  141.   restart)
  142.     # always invoke by absolute path, else PATH=$PATH:
  143.     $0 stop && $0 start
  144.     ;;
  145.   *)
  146.         echo $"Usage: $0 {start|stop|status|restart}"
  147.         exit 1
  148. esac
  149.